import java.awt.Color;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class Ventana extends JFrame implements Runnable{

	private final int ANCHO,ALTO;
	private int flag;
	private Contenedor presentacion, derecha, izquierda,arriba;
	private ViewManager laberinto;
	private JPanel panelInicio,centro;		
	private JButton start, salir;
	private MenuBar barra;
	private Menu menu;
	private MenuItem restart;
	
	public Ventana(int flag, ViewManager laberinto){
		super("LEGO Game");
		this.flag = flag;
		this.laberinto = laberinto;
		ANCHO = Toolkit.getDefaultToolkit().getScreenSize().width;
		ALTO = Toolkit.getDefaultToolkit().getScreenSize().height;	
		
		panelInicio = new JPanel();
		presentacion = new Contenedor("presentacion.jpg");
		derecha = new Contenedor("derecha.jpg");
		izquierda = new Contenedor("izquierda.jpg");
		arriba = new Contenedor("arriba.png");
		
		centro = new JPanel();
		start = new JButton();
		salir = new JButton();
		barra = new MenuBar();
		menu = new Menu("Sistema");
		restart = new MenuItem("Reiniciar");

////////////////////////////////////////Caracteristicas del JFrame
      	
		this.setUndecorated(false);
        this.setResizable(true);
        this.setVisible(true);
        this.setBackground(Color.BLACK);
        this.setSize(200, 250);
		this.setLayout(null);
		this.setLocation(ANCHO/2-this.getSize().width/2, ALTO/2-this.getSize().height/2);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		

/////////////////////////////////////////Panel
		
		panelInicio.setLayout(null);
        panelInicio.setLocation(50, 110);
		panelInicio.setSize(100, 100);
		panelInicio.setVisible(true);

		presentacion.setLayout(null);
        presentacion.setLocation(50, 10);
		presentacion.setSize(100, 100);
		presentacion.setVisible(true);
		
		centro.setLayout(null);
		centro.setBackground(Color.white);
        centro.setLocation(ANCHO/4, ALTO/4);
		centro.setSize(ANCHO/2, ALTO-ALTO/4);
		centro.add(laberinto);
		centro.setVisible(true);

		laberinto.setSize(402, 402);
		laberinto.setLocation(centro.getSize().width/2 - laberinto.getSize().width/2, 10);
		laberinto.setVisible(true);

		derecha.setLayout(null);
		derecha.setLocation(ANCHO-ANCHO/4, 0);
		derecha.setSize(ANCHO/4, ALTO);
		derecha.setVisible(true);
		
		izquierda.setLayout(null);
		izquierda.setLocation(0, 0);
		izquierda.setSize(ANCHO/4, ALTO);
		izquierda.setVisible(true);
		
		arriba.setLayout(null);
		arriba.setLocation(ANCHO/4,0);
		arriba.setSize(ANCHO/2, ALTO/4);
		arriba.setVisible(true);

////////////////////////////////////////Botones
		start.setSize(100, 30);
		start.setText("start");
		start.setLocation(0, 10);
		start.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e){
					if(getFlag() == 1){
						errorConexion();
					}
					else{
						comenzar();
					}
	            }
	        }
	    );

		salir.setSize(100, 30);
		salir.setText("salir");
		salir.setLocation(0, 50);
		salir.addActionListener(
	            new ActionListener(){
	                public void actionPerformed(ActionEvent e) {
	                    System.exit(0);
	                }
	            }
	    );
		
		restart.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e){
					restart();
	            }
	        }
	    );
		
////////////////////////////////////Agrego contenido al JPanel
		panelInicio.add(start);
		panelInicio.add(salir);
		
////////////////////////////////////Agrego contenido al JFrame
        this.setMenuBar(barra);
		this.add(panelInicio);
        this.add(presentacion);
    }
	
	private void comenzar(){
		this.setVisible(false);
		this.remove(panelInicio);
		this.remove(presentacion);
		this.setSize(ANCHO,ALTO);
		this.setLocation(0, 0);
		this.add(derecha);
		this.add(centro);
		this.add(izquierda);
		this.add(arriba);
		this.barra.add(menu);
		this.menu.add(restart);
		this.setVisible(true);
		
		(new Thread(this)).start();
	}
	
	public int getFlag(){
		return this.flag;
	}
	
	public void restart(){
		this.laberinto.restart();
	}
	
	public void errorConexion()
	{
		JOptionPane.showMessageDialog(this, "No esta conectado el Joystick\nConecte el dispositivo y reinicie el programa\n", "Falta dispositivo", JOptionPane.ERROR_MESSAGE);
		System.exit(1);
	}

	public void dibujar()
	{
		laberinto.repaint();
	}
	
	@Override
	public void run(){
		while(true){
			this.paintAll(getGraphics());
			dibujar();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
